package bean;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;

import logic.Buscador;
import bean.juego.Juego;
import bean.jugador.Jugador;

public class Grupo {

    private final int cantidadJuegosJugados;
    private final int cantidadJuegosGanados;
    private final List<Jugador> jugadores;

    public Grupo(Collection<Jugador> jugadores, List<Juego> juegos) {
        super();

        if (jugadores == null || jugadores.isEmpty()) {
            throw new NullPointerException("jugadores can not be null or empty");
        }

        int tmpcantidadJuegosJugados = 0;
        int tmpcantidadJuegosGanados = 0;

        if (jugadores.size() == 1) {
            Jugador jugador = jugadores.iterator().next();

            for (Juego juego : juegos) {
                if (juego.esJugador(jugador)) {
                    tmpcantidadJuegosJugados++;

                    if (juego.esGanador(jugador)) {
                        tmpcantidadJuegosGanados++;
                    }
                }
            }

        } else {
            for (Juego juego : juegos) {
                if (juego.sonMismoEquipo(jugadores)) {
                    tmpcantidadJuegosJugados++;

                    if (juego.esGanador(jugadores.iterator().next())) {
                        tmpcantidadJuegosGanados++;
                    }
                }
            }
        }

        this.jugadores = Collections.unmodifiableList(new ArrayList<Jugador>(jugadores));
        this.cantidadJuegosJugados = tmpcantidadJuegosJugados;
        this.cantidadJuegosGanados = tmpcantidadJuegosGanados;
    }

    public Grupo(Collection<Jugador> jugadores) {
        this(jugadores, Buscador.getListaJuegos());
    }

    public int getCantidadJuegosGanados() {
        return this.cantidadJuegosGanados;
    }

    public int getCantidadJuegosJugados() {
        return this.cantidadJuegosJugados;
    }

    public List<Jugador> getJugadores() {
        return this.jugadores;
    }

    public double getEfectividad() {
        return (double) this.getCantidadJuegosGanados() / this.getCantidadJuegosJugados();
    }

    @Override
    public String toString() {
        return this.jugadores + " (" + getCantidadJuegosGanados() + "/" + getCantidadJuegosJugados() + ") " + getEfectividad();
    }
}
